(function(root,factory){
	if (typeof exports === 'object') {
        // Node. 
       	var database = require("./database");
       	var sqlite3 = require('sqlite3').verbose();
        module.exports = factory.call(root,database,sqlite3);
    }
}(this,function(database,sqlite3){
	database.database("sqlite3",function(parent){
		return {
			init:function(options){
				parent.init.call(this,options);
			},
			open:function(){
				this.db=new sqlite3.Database(this.options.url);
			},
			close:function(){
				this.db.close();
			},
			trans:function(fn){
				this.db.serialize(function(){
					fn(this);
				});
			},
			_run:function(sql,data){
				this.db.run(sql,data);
			},
			_first:function(sql,data,fn){
				if(fn) this.db.get(sql,data,fn);
				else this.db.get(sql,data);
			},
			_all:function(sql,data,fn){
				if(fn)this.db.all(sql,data,fn);
				else this.db.all(sql,data);
			},
			_each:function(sql,data,fn){
				if(fn)this.db.each(sql,data,fn);
				else this.db.each(sql,data);
			}
		}
	});

	return database;
}));